package net.suplementos.dao;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;

import net.suplementos.exception.DAOException;
import net.suplementos.pojo.Usuario;

public class UsuarioDAO extends JPAAbstractDAO<Usuario, Integer> {

	public UsuarioDAO(EntityManager manager) throws DAOException {
	    super(manager);
	}
	
	protected Class<Usuario> doGetClass() {
		return Usuario.class;
	}
	
	public Usuario getPorLogin(String login) throws DAOException {
		String consulta = "select u from Usuario u where u.login = ?";

		List<Usuario> usuarios = consultar(consulta, login);

		if (usuarios == null || usuarios.isEmpty()) {
			return null;
		}

		return usuarios.get(0);
	}

	public List<Usuario> consultar(Usuario usuario) throws DAOException {
       	StringBuilder hql = new StringBuilder("select registro from Usuario registro where 1 = 1 ");
       	List<Object> parametros = new ArrayList<Object>();

    	if (usuario.getId() != null) {
    		hql.append("and registro.id = ?");
    		parametros.add(usuario.getId());
    	}
    	if (usuario.getCpf() != null) {
    		hql.append("and registro.cpf = ?");
    		parametros.add(usuario.getCpf());
    	}
    	if (usuario.getDataCriacao() != null) {
    		hql.append("and registro.dataCriacao = ?");
    		parametros.add(usuario.getDataCriacao());
    	}
    	if (usuario.getDataDesativacao() != null) {
    		hql.append("and registro.dataDesativacao = ?");
    		parametros.add(usuario.getDataDesativacao());
    	}
    	if (usuario.getDataUltimoLogin() != null) {
    		hql.append("and registro.dataUltimoLogin = ?");
    		parametros.add(usuario.getDataUltimoLogin());
    	}
    	if (usuario.getLogin() != null&& !usuario.getLogin().trim().equals("")) {
    		hql.append("and registro.login = ?");
    		parametros.add(usuario.getLogin());
    	}
    	if (usuario.getNome() != null && !usuario.getNome().trim().equals("")) {
    		hql.append("and registro.nome like ?");
    		parametros.add("%" + usuario.getNome() + "%");
    	}
    	if (usuario.getSituacao() != null) {
    		hql.append("and registro.situacao = ?");
    		parametros.add(usuario.getSituacao());
    	}
    	if (usuario.getUsuarioCriador() != null && usuario.getUsuarioCriador().getId() != null) {
    		hql.append("and registro.usuarioCriador.id = ?");
    		parametros.add(usuario.getUsuarioCriador());
    	}

    	return consultar(hql.toString(), parametros.toArray(new Object[parametros.size()]));
	}
}
